﻿using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Web;
using wnet.admin.Comm;
using wnet.admin.Models.Models.ywbusiness;
using wnet.admin.wentcommon;

namespace wnet.admin.CommQueue
{
//lobal.asax：这是 ASP.NET 应用程序的入口点。通过在这里注册事件监听器和启动后台任务，可以确保它们在应用程序生命周期的早期就被设置好。
//Application_Start 方法：用于在应用程序启动时执行初始化逻辑。这里我们注册了集合变化事件处理器，并启动了后台工作者。
//Application_End 方法：用于在应用程序结束时执行清理逻辑。这里我们停止了后台工作者以避免资源泄露。
//OnAlarmsChanged 方法：当 mAlarmViews 集合发生变化时，这个方法会被调用，从而将新的报警信息添加到队列中。
//ConcurrentQueue<T>：这是一个线程安全的队列，用于缓存需要写入数据库的报警信息。
//Timer：定时器用于周期性地触发后台任务，以确保数据能及时写入数据库。

    /// <summary>
    /// 使用 ObservableCollection<T> 监听集合变化
    /// </summary>
    public static class WConstDefine
    {
        // 使用 ObservableCollection 来支持集合变化通知
        //public static ObservableCollection<AlarmView> mAlarmViews = new ObservableCollection<AlarmView>();


        private const int MaxAlarmCount = 1000; // 设置最大报警数量
        public static ObservableCollection<AlarmView> mAlarmViews = new ObservableCollection<AlarmView>();

        public static List<yw_deviceOnline> yw_deviceOnlineList = new List<yw_deviceOnline>();

        public static void AddAlarmView(AlarmView alarmView)
        {
           
            if (mAlarmViews.Count >= MaxAlarmCount)
            {
                // 移除第一个元素
                mAlarmViews.RemoveAt(0);
            }

            // 添加新的报警信息
            mAlarmViews.Add(alarmView);
        }
    }
}